import java.util.*;

/**
 * @author yexy
 * @date 2020/6/14 4:55 下午
 * @description
 */
public class Test {

    public static void main(String[] args) {

        // System.out.println("---------------测试题1--------------------");
        // test1(null);
        // System.out.println("---------------测试题2--------------------");
        // test2("asdafghjka","aaasdfg");
        // System.out.println("---------------测试题3--------------------");
        // test3("123,456,789,123,456");
        // System.out.println("---------------测试题4--------------------");
        // StudentSystem.run();
        System.out.println("---------------测试题5--------------------");
        Landlords.start();
    }

    // 编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打 印出来。
    public static void test1(String str) {
        char[] chars = str == null ? "ABCD123!@#$%ab".toCharArray() : str.toCharArray();

        StringBuilder upStrings = new StringBuilder();
        StringBuilder lowStrings = new StringBuilder();
        StringBuilder numStrings = new StringBuilder();
        StringBuilder otherStrings = new StringBuilder();

        for (char c : chars) {
            if (c >= 'A' && c <= 'Z')
                upStrings.append(c);
            else if (c >= 'a' && c <= 'z')
                lowStrings.append(c);
            else if (c >= '0' && c <= '9')
                numStrings.append(c);
            else
                otherStrings.append(c);
        }

        System.out.println("大写字母个数：" + upStrings.length() + ",是" + upStrings);
        System.out.println("小写字母个数：" + lowStrings.length() + ",是" + lowStrings);
        System.out.println("数字字符个数：" + numStrings.length() + ",是" + numStrings);
        System.out.println("其他字符个数：" + otherStrings.length() + ",是" + otherStrings);
    }


    //编程获取两个指定字符串中的最大相同子串。
//    如： s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"
//    提示： 将短的那个串进行长度依次递减的子串与较长的串比较。
    public static String test2(String str1, String str2) {
        //短的string
        String shortStr = str1.length() > str2.length() ? str2 : str1;
        //长的string
        String longStr = shortStr == str1 ? str2 : str1;
        //最长子串
        String result = "";

        for (int i = 0; i < shortStr.length(); i++) {
            for (int j = 0; j <= i; j++) {
                /*
                 *	 因为substring(int beginIndex, int endIndex) 属于半闭半开，取值范围[x,y)。
                 *	 通过内层循环控制substring的beginIndex参数
                 *	 第一次是[0,shortStr.length())
                 *	 第二次是[0,shortStr.length()-1)、[1,shortStr.length())
                 *   第三次是[0,shortStr.length()-2)、[1,shortStr.length()-1)、[2,shortStr.length())
                 *	 可以知其规律，通过减去i来控制内层循环每次的值，然后通过j的值逐次递增,即[j,shortStr.length()-i+j)
                 */
                result = shortStr.substring(j, shortStr.length() - i + j);
                if (longStr.contains(result)) {
                    System.out.println("最长子串为：" + result);
                    return result;
                } else {
                    result = "";
                }
            }
        }

        System.out.println("最长子串为：" + result);
        return result;
    }

    //准备一个 HashMap 集合，统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。
//    如：
//        123 出现了 2 次
//        456 出现了 2 次
//        789 出现了 1 次
    public static HashMap<String, Integer> test3(String str) {
        List<String> stringList = Arrays.asList(str.split(","));
        HashMap<String, Integer> resultMap = new HashMap<>();
        //遍历数组 并添加到map中
        for (String s : stringList) {
            Integer value = resultMap.containsKey(s) ? resultMap.get(s) + 1 : 1;
            resultMap.put(s, value);
        }
        
        //输出
        for (Map.Entry<String, Integer> e : resultMap.entrySet()) {
            System.out.println(e.getKey() + "出现了" + e.getValue() + "次");
        }
        return resultMap;
    }
}
